home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
551-575
/
disk_571
/
gwin
/
examples
/
speedy.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
2KB
|
86 lines
#include "gwin.user.h"
int seed = 0x7f03;
float random();
double ran();
int randseed = 345732;
main()
{
int ix,iy,xold,yold,xanchor,yanchor;
USTART("high2",0.,640.,0.,400.);
upset(G,"colo",1.0);
uprint(G,10.,90.,"Press left mouse button, hold, drag, release...");
uset(G,"comp");
uset(G,"ncli");
BNDRYOFF(rport1); /* BNDRYOFF is important! */
uuev.key = '\0';
while (1==1){
while(uuev.key != 'a'){
if(uigrina(G,&ix,&iy,&uuev)) {UEND();exit(0);}
}
RectFill(rport1,ix-10,iy-10,ix,iy);
xold = ix;
yold = iy;
while (uuev.key != 'A'){
if(uigrina(G,&ix,&iy,&uuev)) {UEND();exit(0);}
randomdraw();
if(ix != xold || iy != yold){
RectFill(rport1,xold-10,yold-10,xold,yold);
RectFill(rport1,ix-10,iy-10,ix,iy);
xold = ix;
yold = iy;
}
}
}
UEND();
}
randomdraw()
{
int ix,iy;
ix = 630.0*random(&seed);
iy = 380.0*random(&seed);
RectFill(rport1,ix+5,iy+15,ix+7,iy+17);
}
/* Note, the Manx "ran()" function appears to provide very */
/* low precision results that are obvious on the screen. The */
/* following random number generator is an improvement and */
/* sufficient for this demomstration. You might wish to recompile */
/* using the "ran()" function instead of the "random()" function */
/* and observe the unwanted "order" that appears in the distribution. */
float random(ix)
int *ix;
/* This routine adapted from page 227 of Simulation and */
/* Modeling Analysis, Law and Kelton, 1982. */
{
float rand;
int xhi,xalo,leftlo,fhi,k;
int a = 16807;
int b15 = 32768;
int b16 = 65536;
int p = 2147483647;
xhi = *ix/b16;
xalo = (*ix-xhi*b16)*a;
leftlo = xalo/b16;
fhi = xhi*a+leftlo;
k = fhi/b15;
*ix = (((xalo-leftlo*b16)-p)+(fhi-k*b15)*b16)+k;
if( *ix < 0 ) *ix = *ix + p;
rand = *ix * 4.656612875e-10;
return(rand);
}